# ！ /usr/bin/python3
# -*- coding:utf-8 -*-


from functools import reduce

f = lambda x, y: x * x + y  # 冒号前面的x为输入值，后面的为输出值
print(f(4, 5))

g1 = map(lambda x: x + 3, [1, 2, 3])  # 它接收一个函数 f 和一个 list，并通过把函数 f 依次作用在 list 的每个元素上，得到一个新的 list 并返回
print(g1)
print(f"map函数g1的值：{list(g1)}")  # map函数的值：[4, 5, 6]

g2 = map(lambda x, y: x + y, [1, 0, 3], [2, 0, 4])  # 它接收一个函数 f 和一个 list，并通过把函数 f 依次作用在 list 的每个元素上，得到一个新的 list 并返回
print(g2)
print(f"map函数g2的值：{list(g2)}")  # map函数的值：[3, 0, 7]

m = reduce(lambda x, y: x + y, [1, 2, 3, 4])  # reduce()传入的函数f必须接收两个参数，reduce()对list的每个元素反复调用函数f，并返回最终结果值。
print(f"reduce函数m的值：{m}")  # reduce函数的值：10

n = filter(lambda x: x % 10 == 0,
           range(1, 100))  # filter()函数接收一个函数 f 和一个list，这个函数f的作用是对每个元素进行判断，返回 True或 False，filter()根据判断结果自动过滤掉不符合条件的元素
print(n)
print(list(n))  # [10, 20, 30, 40, 50, 60, 70, 80, 90]

l = sorted([1, 3, 4, 2, 9, 4, 6], key=None, reverse=True)  # sorted 可以对所有可迭代的对象进行排序操作
print(l)

# 求1-100的和
print(sum(range(1, 101)))
print(reduce(lambda x, y: x + y, range(1, 101)))
